package com.atguigu.cloud.tool.exp;/**
 * @Auter zzh
 * @Date 2024/11/13
 */

import com.atguigu.cloud.tool.resp.ResultData;
import com.atguigu.cloud.tool.resp.ReturnCodeEnum;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;

/**
 * @projectName: keshe
 * @package: com.atguigu.cloud.tool.exp
 * @className: GlobalExceptionHandler
 * @author: Eric
 * @description: TODO
 * @date: 2024/11/13 17:28
 * @version: 1.0
 */

/*
* @RestControllerAdvice：这是一个Spring框架的注解，用于定义一个全局的异常处理器。任何未被控制器处理的异常都会被这个类捕获。

@Slf4j：这是Lombok库的一个注解，用于自动为类生成日志对象（通常是private static final Logger log = LoggerFactory.getLogger(YourClassName.class);）。

public class GlobalExceptionHandler：定义了一个名为GlobalExceptionHandler的公共类。

@ExceptionHandler()：这是一个方法级别的注解，用于指定这个方法将处理所有类型的异常。如果你想要处理特定类型的异常，可以在括号中指定异常类型，如@ExceptionHandler(SQLException.class)。

public ResultData<String> globalException(Exception e)：定义了一个公共方法globalException，它接受一个Exception类型的参数e。这个方法将处理所有未被捕获的异常。

e.printStackTrace();：这行代码打印出异常的堆栈跟踪，这有助于调试。在生产环境中，通常不建议这样做，因为它可能会泄露敏感信息。

return ResultData.fail(ReturnCodeEnum.RC500.getCode(),e.getMessage());：这行代码创建并返回一个ResultData对象，表示一个失败的响应。ReturnCodeEnum.RC500是一个枚举，可能定义了一系列的错误代码，RC500可能是一个代表服务器内部错误的代码。e.getMessage()获取异常的消息，并将其作为失败响应的一部分返回。
*
* */
@RestControllerAdvice
@Slf4j
public class GlobalExceptionHandler {
    //注解的参数是处理的异常信息类型，什么都不加就是全局异常处理
    //@ExceptionHandler(SQlException.class)这个就是专门处理sql异常
    @ExceptionHandler()
    public ResultData<String> globalException(Exception e){
        e.printStackTrace();
        return ResultData.fail(ReturnCodeEnum.RC500.getCode(),e.getMessage());
    }
}
